﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics.Contracts;

namespace Construct_2._2
{
    class Solver
    {
        private int river_speed = 1;
        private string river_way = null;
        public Solver()
        {

        }

        public void SolveTask(Data Entry, out String way, out int speed)
        {
            Contract.Requires<ArgumentException>(Convert.ToInt32(Entry.speed1) < Convert.ToInt32(Entry.speed2), "Скорость лодки не может быть больше катера");
            Contract.Requires<ArgumentException>(Convert.ToInt32(Entry.speed1) < 30, "Скорость лодки не должна привышать 30 км/час");
            Contract.Requires<ArgumentException>(Convert.ToInt32(Entry.speed2) < 50, "Скорость лодки не должна привышать 50 км/час");

            Contract.Ensures(this.river_way.Equals("AB") || this.river_way.Equals("BA"));
            way = "";
            //формула
            this.river_speed = -2*Entry.speed2 + (int)Math.Sqrt(Math.Pow(5*Entry.speed2,2.0) - 4*Entry.speed1 * Entry.speed2);
            if (this.river_speed > 0)
            { this.river_way = "AB"; way = "AB"; }
            else if (this.river_speed < 0)
            { this.river_way = "BA"; way = "BA"; }
            speed = this.river_speed;
        }

        [ContractInvariantMethod]
        private void ObjectInvariant()
        {
            Contract.Invariant(this.river_speed != 0);
            Contract.Invariant(this.river_speed < 150, "Скорость реки меньше чем 150");
        }
    }
}
